home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / SERIE_AI / AI_081 / CBHD501 / SRC / M2 / SCSIUTIL.M < prev   
Text File  |  1998-03-14  |  5KB  |  238 lines

  1. IMPLEMENTATION MODULE ScsiUtils;
  2. (****************************************************************************
  3.  *
  4.  * Utilities für die Arbeit am SCSI-Port
  5.  *
  6.  * Teile aus ScsiBase, die bei nichtresidenten Moduln verwendet werden,
  7.  * sind hierin gesammelt.
  8.  * Grund dafür ist der Modulrumpf von ScsiBase, der aufgrund der
  9.  * Initialisierungen zum Einbinden von Treibern ca. 8 kByte Code produziert,
  10.  * die sonst unnötig sind.
  11.  *
  12.  *
  13.  * $Source: E:\HM2\LIB\se\rcs\scsiutil.m,v $
  14.  *
  15.  * $Revision: 1.2 $
  16.  *
  17.  * $Author: S_Engel $
  18.  *
  19.  * $Date: 1995/10/30 17:44:48 $
  20.  *
  21.  * $State: Exp $
  22.  *
  23.  *****************************************************************************
  24.  * History:
  25.  *
  26.  * $Log: scsiutil.m,v $
  27.  * Revision 1.2  1995/10/30  17:44:48  S_Engel
  28.  * *** empty log message ***
  29.  *
  30.  * Revision 1.1  1995/01/01  19:14:58  S_Engel
  31.  * Initial revision
  32.  *
  33.  *
  34.  *
  35.  ****************************************************************************)
  36.  
  37. FROM Portab IMPORT tCompiler, Compiler;
  38. (*$?Compiler=Haenisch:
  39.  (*$S- $V- $T- *)
  40.  *)
  41. (*$?Compiler=Megamax:
  42.     (*$R- Bereichsprüfung aus                 *)
  43.     (*$S- Stack-Prüfung aus                     *)
  44.     (*$Z+ Funktionswerte in Registern *)
  45.  *)
  46.  
  47. FROM SYSTEM     IMPORT
  48.         (* Type  *) ADDRESS;
  49. IMPORT SYSTEM;
  50.  
  51. (*$?Compiler=Haenisch:
  52.     FROM SYSTEM  IMPORT CODE;
  53.     (* String für WHAT - leider ein bißchen HM2-spezifisches *)
  54.     CONST What = '@(#) ScsiUtil '
  55.                              + CHR(SYSTEM.DATE DIV 1000000H DIV 10 + 48)
  56.                              + CHR(SYSTEM.DATE DIV 1000000H MOD 10 + 48) + '.'
  57.                              + CHR(SYSTEM.DATE DIV 10000H MOD 100H DIV 10 MOD 10 + 48)
  58.                              + CHR(SYSTEM.DATE DIV 10000H MOD 100H MOD 10 + 48) + '.'
  59.                              + CHR(SYSTEM.DATE MOD 10000H DIV 10 MOD 10 + 48)
  60.                              + CHR(SYSTEM.DATE MOD 10000H MOD 10 + 48)
  61.                              + '  (c) S. Engel';
  62.  *)
  63.  
  64.  
  65. VAR
  66.     memvalid    [0000420H] : LONGCARD;
  67.     ResValid    [0000426H] : LONGCARD;
  68.     memval2     [000043AH] : LONGCARD;
  69.     OldSsp                             : ADDRESS;
  70.  
  71.  
  72. (*$?Compiler=Megamax: (*$L-*) *)
  73. (*$?Compiler=Haenisch: (*$Y- $X-*) *)
  74. PROCEDURE IsSuperOn():BOOLEAN;
  75. BEGIN
  76.     (*$?Compiler=Haenisch:
  77. (*\ONYX v2.00  28.02.93 14:37*)(*$D-*)
  78. (*26 bytes of MC68020 code*)
  79. CODE(048E7H,02020H);
  80. CODE(02F3CH,00000H,00001H);
  81. CODE(03F3CH,00020H);
  82. CODE(04E41H);
  83. CODE(05C8FH);
  84. CODE(00240H,00001H);
  85. CODE(04CDFH,00404H);
  86. (*$D=*)
  87. (*\=
  88.         MOVEM.L D2/A2, -(SP)
  89.         MOVE.L    #1, -(SP)                                 ; Inquire SuperMode
  90.         MOVE.W    #32,-(SP)                                 ; Super
  91.         TRAP        #1                                                ; GEMDOS
  92.         ADDQ.L    #6,SP                                         ; D0 = 0 : aus, D0 = -1 : an
  93.         ANDI.W    #1, D0                                        ; aus -1 mach 1
  94.         MOVEM.L (SP)+,D2/A2
  95. \*)
  96.      *)
  97.     (*$?Compiler=Megamax:
  98.     SYSTEM.ASSEMBLER
  99.         MOVE.L    #1, -(SP)                                 ; Inquire SuperMode
  100.         MOVE.W    #32,-(SP)                                 ; Super
  101.         TRAP        #1                                                ; GEMDOS
  102.         ADDQ.L    #6,SP                                         ; D0 = 0 : aus, D0 = -1 : an
  103.         ANDI.W    #1, D0                                        ; aus -1 mach 1
  104.     END;
  105.      *)
  106. END IsSuperOn;
  107. (*$?Compiler=Megamax: (*$L=*) *)
  108. (*$?Compiler=Haenisch: (*$Y= $X=*) *)
  109.  
  110.  
  111. (*$?Compiler=Megamax: (*$L-*) *)
  112. PROCEDURE SuperOn;
  113. BEGIN
  114.     (*$?Compiler=Haenisch:
  115. (*\ONYX v2.00  28.02.93 14:37*)(*$D-*)
  116. (*18 bytes of MC68020 code*)
  117. CODE(048E7H,02020H);
  118. CODE(042A7H);
  119. CODE(03F3CH,00020H);
  120. CODE(04E41H);
  121. CODE(05C8FH);
  122. CODE(04CDFH,00404H);
  123. (*$D=*)
  124. (*\=
  125.         MOVEM.L D2/A2, -(SP)
  126.         CLR.L     -(SP)
  127.         MOVE.W    #32,-(SP)
  128.         TRAP        #1
  129.         ADDQ.L    #6,SP
  130.         MOVEM.L (SP)+,D2/A2
  131. \*)
  132.     SYSTEM.STORE (0, OldSsp);     (* OldSsp sichern *)
  133.      *)
  134.     (*$?Compiler=Megamax:
  135.     SYSTEM.ASSEMBLER
  136.         CLR.L     -(SP)
  137.         MOVE.W    #32,-(SP)
  138.         TRAP        #1
  139.         ADDQ.L    #6,SP
  140.         MOVE.L    D0,OldSsp
  141.     END;
  142.     *)
  143. END SuperOn;
  144. (*$?Compiler=Megamax: (*$L=*) *)
  145.  
  146.  
  147. (*$?Compiler=Megamax: (*$L-*) *)
  148. PROCEDURE SuperOff;
  149. BEGIN
  150.     (*$?Compiler=Haenisch:
  151.     SYSTEM.LOAD(OldSsp, 0);
  152. (*\ONYX v2.00  28.02.93 14:37*)(*$D-*)
  153. (*18 bytes of MC68020 code*)
  154. CODE(048E7H,02020H);
  155. CODE(02F00H);
  156. CODE(03F3CH,00020H);
  157. CODE(04E41H);
  158. CODE(05C8FH);
  159. CODE(04CDFH,00404H);
  160. (*$D=*)
  161. (*\=
  162.         MOVEM.L D2/A2, -(SP)
  163.         MOVE.L    D0,-(SP)
  164.         MOVE.W    #32,-(SP)
  165.         TRAP        #1
  166.         ADDQ.L    #6,SP
  167.         MOVEM.L (SP)+,D2/A2
  168. \*)
  169.      *)
  170.     (*$?Compiler=Megamax:
  171.     SYSTEM.ASSEMBLER
  172.         MOVE.L    OldSsp,-(SP)
  173.         MOVE.W    #32,-(SP)
  174.         TRAP        #1
  175.         ADDQ.L    #6,SP
  176.     END;
  177.     *)
  178. END SuperOff;
  179. (*$?Compiler=Megamax: (*$L=*) *)
  180.  
  181.  
  182. PROCEDURE WarmReset;
  183.  BEGIN
  184.     SuperOn;
  185.     (*$?Compiler=Haenisch:
  186. (*\ONYX v2.00  28.02.93 14:37*)(*$D-*)
  187. (*14 bytes of MC68020 code*)
  188. CODE(02079H,00000H,004F2H);
  189. CODE(02050H);
  190. CODE(02068H,00008H);
  191. CODE(04ED0H);
  192. (*$D=*)
  193. (*\=
  194.         MOVEA.L $4f2,A0         ; sysbase
  195.         MOVEA.L (A0),A0         ; wegen Fehler in altem AHDI
  196.         MOVEA.L 8(A0),A0        ; osbeg
  197.         JMP         (A0)                ; und ab die Post
  198. \*)
  199.      *)
  200.     (*$?Compiler=Megamax:
  201.     SYSTEM.ASSEMBLER
  202.         MOVE.L    $4f2,A0         ; sysbase
  203.         MOVE.L    (A0),A0         ; wegen Fehler in altem AHDI
  204.         MOVE.L    8(A0),A0        ; osbeg
  205.         JMP         (A0)                ; und ab die Post
  206.     END;
  207.     *)
  208. END WarmReset;
  209.  
  210.  
  211. PROCEDURE ColdReset;
  212.  BEGIN
  213.     SuperOn;
  214.     (* für Kaltstart die System-Variablen löschen *)
  215.     memvalid := 0;
  216.     ResValid := 0;
  217.     memval2  := 0;
  218.     SuperOff;
  219.     WarmReset;
  220. END ColdReset;
  221.  
  222.  
  223. PROCEDURE Wait(Ticks : LONGCARD);
  224. VAR Clock[04BAH], Time : LONGCARD;
  225.  
  226.     BEGIN
  227.         Time := Clock + Ticks;
  228.         WHILE Clock < Time DO
  229.         END;
  230.     END Wait;
  231.  
  232.  
  233. CONST Dummy = '#@#@#@#@#@#@#@#@#@#@#@#@';
  234.  
  235.  
  236. END ScsiUtils.
  237.                 
  238.